package lib

func init() {
	Probs = append(Probs, Problem{
		Num:         137,
		Discription: "找出只出现一次的数字（其余均只出现三次）",
		Level:       2,
		Labels: map[string]int{
			"位运算": 1,
		},
	})
}

func SingleNumber2(nums []int) int {
	//必须要用int32，保证处理到符号位
	res := int32(0)
	//为什么需要到第31位：第31位是int32的符号位，不处理这一位遇到负数会出问题
	//为什么最高是2的31次方-1：第31位是符号位，只有0...30位是数字位，0...30位全是1就是2的31次方-1
	for i := 0; i <= 31; i++ {
		tepmSum := int32(0)
		for _, num := range nums {
			tepmSum += (int32(num) >> i) & 1
		}
		res += (tepmSum % 3) << i
	}

	return int(res)
}
